package aplication;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.mysql.jdbc.PreparedStatement;

import model.Usuario;

public class GestorUsuario implements CRUDUsuarioInterface
{
    private static final String INSERT = "INSERT INTO usuario SET nombre=?, apellido=?, dni=?, telefono=?, "
            + "email=?";

    private static final String UPDATE = "UPDATE usuario SET nombre=?, apellido=?, dni=?, telefono=?, "
            + "email=? WHERE id = ?";

    private static final String DELETE = "DELETE FROM usuario WHERE id=?";
    
    
    
    public Usuario getById(Integer id) {
        Connection conn = null;
        Usuario usuario = null;

        try {
            conn = Conexion.getConexion();

            PreparedStatement pstm = (PreparedStatement) conn.prepareStatement("SELECT * FROM usuario WHERE id = " + id);

            ResultSet rs = pstm.executeQuery();

            if (rs.next()) {
                usuario = new Usuario();
                usuario.setId(rs.getInt("id"));
                usuario.setNombre(rs.getString("nombre"));      
                usuario.setApellido(rs.getString("apellido")); 
                usuario.setDni(rs.getString("dni")); 
                usuario.setTelefono(rs.getString("telefono")); 
                usuario.setEmail(rs.getString("email")); 
            }

            pstm.close();
            rs.close();
        } catch (SQLException e) {
            System.out.println("Error al cargar el usuario.");
            e.printStackTrace();
        }

        return usuario;
    }

    public boolean save(Usuario usuario)
    {
        Connection conn = null;

        try {
            conn = Conexion.getConexion();
            
            PreparedStatement pstm;
            if (usuario.getId() > 0) { // tiene un id asigando por db, entonces edita
                pstm = (PreparedStatement) conn.prepareStatement(UPDATE);
                pstm.setInt(6, usuario.getId());

            } else { // no hay id, inserta
                pstm = (PreparedStatement) conn.prepareStatement(INSERT);
            }

            pstm.setString(1, usuario.getNombre());
            pstm.setString(2, usuario.getApellido());
            pstm.setString(3, usuario.getDni());
            pstm.setString(4, usuario.getTelefono());
            pstm.setString(5, usuario.getEmail());
            
            
            pstm.executeUpdate();

            pstm.close();
        } catch (SQLException e) {
            System.out.println("Error al guardar el usuario.");
            e.printStackTrace();
        }
        
        return true;
    }

    public boolean delete(Usuario usuario)
    {
        Connection conn = null;

        try {
            conn = Conexion.getConexion();

            PreparedStatement pstm;
            pstm = (PreparedStatement) conn.prepareStatement(DELETE);

            pstm.setInt(1, usuario.getId());
            pstm.executeUpdate();

            pstm.close();
        } catch (SQLException e) {
            System.out.println("Error al borrar el usuario.");
            e.printStackTrace();
        }
        
        return true;
    }

 
    public ArrayList<Usuario> findAll()
    {
        ArrayList<Usuario> resultado = new  ArrayList<Usuario>();
        
        try {
            Connection conn = Conexion.getConexion();

            PreparedStatement pstm = (PreparedStatement) conn
                    .prepareStatement("SELECT id FROM usuario ORDER BY apellido ASC");

            ResultSet rs = pstm.executeQuery();

            while (rs.next()) {
                resultado.add(getById(rs.getInt("id")));
            }

            pstm.close();
            rs.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return resultado;
    }

}
